#ifndef COLLISION_STATES_H
#define COLLISION_STATES_H
#include "State.h"

class Collision;

class Unresolved : public State<Collision>
{
private:
	Unresolved() {}
	Unresolved(const Unresolved&);
	Unresolved& operator=(const Unresolved&);

public:
	static Unresolved* Instance() {static Unresolved instance; return &instance;}

public:
	virtual void Enter(Collision* Collision);
	virtual void Execute(Collision* Collision);
	virtual void Exit(Collision* Collision);

	virtual bool OnMessage(Collision*, const Message&) {return true;}
};

class Resolving : public State<Collision>
{
private:
	Resolving() {}
	Resolving(const Resolving&);
	Resolving& operator=(const Resolving&);

public:
	static Resolving* Instance() {static Resolving instance; return &instance;}

public:
	virtual void Enter(Collision* Collision);
	virtual void Execute(Collision* Collision);
	virtual void Exit(Collision* Collision);

	virtual bool OnMessage(Collision*, const Message&) {return true;}
};

class Resolved : public State<Collision>
{
private:
	Resolved() {}
	Resolved(const Resolved&);
	Resolved& operator=(const Resolved&);

public:
	static Resolved* Instance() {static Resolved instance; return &instance;}

public:
	virtual void Enter(Collision* Collision);
	virtual void Execute(Collision* Collision);
	virtual void Exit(Collision* Collision);

	virtual bool OnMessage(Collision*, const Message&) {return true;}
};



#endif